﻿using System;
using System.Net.Mail;
using System.Net;

namespace Sistema.Util
{
    /// <summary>
    /// Classe que envia email preparado para SMTP.
    /// </summary>
    public class Email
    {
        private String Sevidor = "";
        private string Login = "";
        private string Senha = "";
        private string _Email = "";
        private bool _UsarSSL = false;

        private SmtpClient cliente;

        /// <summary>
        /// Construtor q recebe como argumentos as configuracoes para email SMTP
        /// </summary>
        /// <param name="Servidor">Endereco do servidor SMTP</param>
        /// <param name="Login">Login do Servidor SMTP</param>
        /// <param name="Email">Endereco de Email da Conta informada</param>
        public Email(String Servidor,String Login, String Senha, String Email, bool UsarSSL)
        {
            this.Sevidor = Servidor;
            this.Login = Login;
            this.Senha = Senha;
            this._Email = Email;
            this._UsarSSL = UsarSSL;
            Conectar();
        }

        /// <summary>
        /// Construtor da classe, qlqer configuracao de Email esta fixo no codigo.
        /// </summary>
        public Email()
        {
            Conectar();
        }

        private void Conectar()
        {
            cliente = new SmtpClient();
            cliente.Host = this.Sevidor;
            cliente.EnableSsl = _UsarSSL;
            cliente.Credentials = new NetworkCredential() { UserName = this.Login, Password = this.Senha };
        }

        public void Enviar(MailMessage DadosEnvio)
        {
            DadosEnvio.From = new MailAddress(this._Email);
            cliente.Send(DadosEnvio);
        }

        public void EnviarAssincrono(MailMessage dados)
        {
            cliente.SendCompleted += new SendCompletedEventHandler(EmailAssincEnviado);
            cliente.SendAsync(dados, this);
        }

        public event SendCompletedEventHandler EmailAssincEnviado;
    }
}
